/*
 * Copyright (c) 2024. hallele, Inc All rights reserved.
 */

package cn.hallele.ms.portalcenter.domain.das;

import cn.hallele.infrastructure.util.ObjectUtil;
import cn.hallele.mc.sdk.portalcenter.common.enums.MenuTypeEnum;
import cn.hallele.ms.infrastructure.core.convertor.das.ModelDas;
import cn.hallele.ms.portalcenter.domain.domain.MenuDomain;
import cn.hallele.ms.portalcenter.model.cache.MenuCache;
import cn.hallele.ms.portalcenter.model.entity.MenuEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.Collection;
import java.util.List;

/**
 * hallele_ms_portalcenter
 *
 * @author anle5
 * @since 2024/10/6 13:51
 */
@Slf4j
@Service
public class MenuDEDas extends ModelDas<MenuCache, MenuDomain, MenuEntity> {
    protected MenuDEDas(MenuCache option) {
        super(option);
    }

    /**
     * 通过ids查询菜单
     *
     * @param ids id集合
     * @return 菜单结果
     */
    public List<MenuDomain> findByIdIn(Collection<Long> ids) {
        return revertList(this.option.findByIdIn(ids));
    }

    /**
     * 通过id和Type查询菜单
     *
     * @param ids   id集合
     * @param types 菜单类型
     * @return 菜单结果
     */
    public List<MenuDomain> findByIdInAndTypeIn(Collection<Long> ids, List<MenuTypeEnum> types) {
        return revertList(this.option.findByIdInAndTypeIn(ids, types));
    }

    /**
     * 查询所有
     *
     * @param condition 查询条件
     * @param pageNum   页码
     * @param pageSize  页码大小
     * @return 查询及结果
     */
    public List<MenuDomain> findAll(MenuDomain condition, int pageNum, int pageSize) {
        return revertList(this.option.findAllByCondition(convert(condition), pageNum, pageSize).getContent());
    }

    /**
     * 将T转成E
     *
     * @param menuDomain 被转换者
     * @return S 转换后者
     */
    @Override
    protected MenuEntity convert(MenuDomain menuDomain) {
        return ObjectUtil.map(menuDomain, u -> MenuEntity.builder()
                .id(u.getId())
                .parentId(u.getParentId())
                .title(u.getTitle())
                .name(u.getName())
                .type(u.getType())
                .path(u.getPath())
                .component(u.getComponent())
                .perm(u.getPerm())
                .hide(u.getHide())
                .sort(u.getSort())
                .icon(u.getIcon())
                .redirect(u.getRedirect())
                .createTime(u.getCreateTime())
                .updateTime(u.getUpdateTime())
                .alwaysShow(u.getAlwaysShow())
                .keepAlive(u.getKeepAlive())
                .full(u.getFull())
                .affix(u.getAffix())
                .build());
    }

    /**
     * 将E回转陈T
     *
     * @param menuEntity 被回转换者
     * @return S 回转换后者
     */
    @Override
    protected MenuDomain revert(MenuEntity menuEntity) {
        return ObjectUtil.map(menuEntity, u -> MenuDomain.builder()
                .id(u.getId())
                .parentId(u.getParentId())
                .title(u.getTitle())
                .name(u.getName())
                .type(u.getType())
                .path(u.getPath())
                .component(u.getComponent())
                .perm(u.getPerm())
                .hide(u.getHide())
                .sort(u.getSort())
                .icon(u.getIcon())
                .redirect(u.getRedirect())
                .createTime(u.getCreateTime())
                .updateTime(u.getUpdateTime())
                .alwaysShow(u.getAlwaysShow())
                .keepAlive(u.getKeepAlive())
                .full(u.getFull())
                .affix(u.getAffix())
                .build());
    }
}
